home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / etc / bash_completion.d / ssh < prev    next >
Text File  |  2009-10-05  |  3KB  |  143 lines

  1. # -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
  2. # ex: ts=8 sw=8 noet filetype=sh
  3. #
  4. # ssh(1) completion
  5. #
  6. have ssh && {
  7. _ssh()
  8. {
  9.     local cur prev
  10.     local optconfigfile
  11.     local -a config
  12.  
  13.     COMPREPLY=()
  14.     cur=`_get_cword`
  15.     prev=${COMP_WORDS[COMP_CWORD-1]}
  16.  
  17.     case "$prev" in
  18.     -F)
  19.         _filedir
  20.         ;;
  21.     -*c)
  22.         COMPREPLY=( $( compgen -W 'blowfish 3des 3des-cbc blowfish-cbc \
  23.                arcfour cast128-cbc' -- $cur ) )
  24.         ;;
  25.     -*i)
  26.         _filedir
  27.         ;;
  28.     -*l)
  29.         COMPREPLY=( $( compgen -u -- $cur ) )
  30.         ;;
  31.     *)
  32.         # Search COMP_WORDS for '-F configfile' argument
  33.         set -- "${COMP_WORDS[@]}"
  34.         while [ $# -gt 0 ]; do
  35.             if [ "${1:0:2}" = -F ]; then
  36.                 if [ ${#1} -gt 2 ]; then
  37.                     optconfigfile="$(dequote "$1")"
  38.                 else
  39.                     shift
  40.                     [ "$1" ] && optconfigfile="$(dequote "-F$1")"
  41.                 fi
  42.                 break
  43.             fi
  44.             shift
  45.         done
  46.  
  47.         _known_hosts -a "$optconfigfile"
  48.  
  49.         [ $COMP_CWORD -eq 1 -o -n "$optconfigfile" ] || \
  50.         COMPREPLY=( "${COMPREPLY[@]}" $( compgen -c -- $cur ) )
  51.     esac
  52.  
  53.     return 0
  54. }
  55. shopt -u hostcomplete && complete -F _ssh ssh slogin sftp xhost autossh
  56.  
  57. # scp(1) completion
  58. #
  59. _scp()
  60. {
  61.     local cur userhost path
  62.     local optconfigfile
  63.  
  64.     COMPREPLY=()
  65.     cur=`_get_cword ":"`
  66.  
  67.     _expand || return 0
  68.  
  69.     if [[ "$cur" == *:* ]]; then
  70.         local IFS=$'\t\n'
  71.         # remove backslash escape from :
  72.         cur=${cur/\\:/:}
  73.         userhost=${cur%%?(\\):*}
  74.         path=${cur#*:}
  75.         # unescape spaces
  76.         path=${path//\\\\\\\\ / }
  77.         if [ -z "$path" ]; then
  78.             # default to home dir of specified user on remote host
  79.             path=$(ssh -o 'Batchmode yes' $userhost pwd 2>/dev/null)
  80.         fi
  81.         # escape spaces; remove executables, aliases, pipes and sockets;
  82.         # add space at end of file names
  83.         COMPREPLY=( $( ssh -o 'Batchmode yes' $userhost \
  84.                    command ls -aF1d "$path*" 2>/dev/null | \
  85.                    sed -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\\\\\\\\\&/g" \
  86.                    -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
  87.         return 0
  88.     fi
  89.  
  90.     # Search COMP_WORDS for '-F configfile' argument
  91.     set -- "${COMP_WORDS[@]}"
  92.     while [ $# -gt 0 ]; do
  93.         if [ "${1:0:2}" = -F ]; then
  94.             if [ ${#1} -gt 2 ]; then
  95.                 optconfigfile="$(dequote "$1")"
  96.             else
  97.                 shift
  98.                 [ "$1" ] && optconfigfile="$(dequote "-F$1")"
  99.             fi
  100.             break
  101.         fi
  102.         shift
  103.     done
  104.  
  105.     [[ "$cur" == */* ]] || _known_hosts -c -a "$optconfigfile"
  106.  
  107.     # This approach is used instead of _filedir to get a space appended
  108.     # after local file/dir completions, and $nospace retained for others.
  109.     local IFS=$'\t\n'
  110.     COMPREPLY=( "${COMPREPLY[@]}" $( command ls -aF1d $cur* \
  111.             2>/dev/null | sed \
  112.             -e "s/[][(){}<>\",:;^&\!$=?\`|\\ ']/\\\\&/g" \
  113.             -e 's/[*@|=]$//g' -e 's/[^\/]$/& /g' ) )
  114.  
  115.     return 0
  116. }
  117. complete -F _scp $nospace scp sshfs
  118.  
  119. # ssh-copy-id(1) completion
  120. #
  121. _ssh_copy_id() {
  122.     local cur prev
  123.  
  124.     COMPREPLY=()
  125.     cur=`_get_cword`
  126.     prev=${COMP_WORDS[COMP_CWORD-1]}
  127.  
  128.     case "$prev" in
  129.     -*i)
  130.         _filedir
  131.         ;;
  132.     *)
  133.         _known_hosts -a
  134.  
  135.         [ $COMP_CWORD -eq 1 ] || \
  136.         COMPREPLY=( "${COMPREPLY[@]}" $( compgen -- $cur ) )
  137.     esac
  138.  
  139.     return 0
  140. }
  141. complete -F _ssh_copy_id $filenames ssh-copy-id
  142. }
  143.